//
//  LMBaseViewController.swift
//  WeiBo
//
//  Created by Li MAc on 2018/11/13.
//  Copyright © 2018 Li MAc. All rights reserved.
//

import UIKit

class LMBaseViewController: UIViewController {

       // 自定义导航条
      //Swift自定义导航栏的问题
      //找到了病根问题就好解决了，只要重新设置下UINavigationBarContentView的位置就可以了，先继承一个UINavigationBar重写layoutSubviews
        lazy var navigationBar = LMNavigationBar(frame: CGRect(x: 0, y: 0, width: UIScreen.cz_screenWidth(), height: 64))
    
       //自定义的导航条目 - 以后设置导航栏内容，统一使用 navItem
    ///自定义的导航条目
        lazy var navItem = UINavigationItem()
    
    //刷新控件
    var refresh : UIRefreshControl?
    
    var tableView:UITableView?
    // 上拉刷新标记
    var stretchingUp = false
    
    //访客t视图标记
//    var login = true
    //访客视图的信息字典传递访客视图中的图片以及标题
    var dicttt : [String : String]?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        //取消自动缩进
        automaticallyAdjustsScrollViewInsets = false
        
        view.backgroundColor = UIColor.cz_random()
        
        setupUI()
        
        NotificationCenter.default.addObserver(self, selector: #selector(longinTrue), name: NSNotification.Name(rawValue: LoginTure), object: nil)

    }
    
    deinit {
        NotificationCenter.default.removeObserver(self)
    }
     /// 重写 title 的 didSet
    override var title: String? {
        didSet {
            navItem.title = title
        }
    }
}



extension LMBaseViewController {
    
   @objc private func setupUI(){
        view.backgroundColor = UIColor.cz_random()
    
    
    //添加导航条及其他设置
   setupNavigationgBar()
    
    //添加tableView
//    setupTableView()
    
//    login ? setupTableView() : setupVisitorView()
    LMNetworkTools.shared.userLogno ? setupTableView():setupVisitorView()
    
    //判断用户是否登陆 登陆加载数据 否什么度不做
    LMNetworkTools.shared.userLogno ? loadDataa() : ()
    
    
    }
   
    
    
    
    @objc func longinTrue(notif:Notification){
        print("登陆成功\(notif)")
        view = nil
        self.navigationItem.leftBarButtonItem = nil
        self.navigationItem.rightBarButtonItem = nil
        NotificationCenter.default.removeObserver(self)
    }
    
    @objc func loadDataa(){
        //子类不要实现方法时关闭，不然会出现刷新其他页面不操作返回时菊花还在
         refresh?.endRefreshing()
    }
    
    //登陆按钮添加通知
    @objc func loginButItem(){
        
        NotificationCenter.default.post(name: NSNotification.Name(rawValue: TongZhi), object: nil)
    }
    
    @objc func registeButItem(){
        print("点击了组册按钮")
    }
    
    private func setupNavigationgBar(){
        
        navigationBar.clipsToBounds = true
        
        //添加导航条
        view.addSubview(navigationBar)
        //将 item 设置给 bar
        navigationBar.items = [navItem]
        
        // 设置 navbar 的渲染颜色 NSAttributedString.Key.foregroundColor: UIColor.orange]
        navigationBar.barTintColor = UIColor.cz_color(withHex: 0xF6F6F6)
        // 设置标题title的颜色
        navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor:UIColor.gray]
        
        // 设置bar文字的颜色
        navigationBar.tintColor = UIColor.orange
    }
    
    //访客视图
    private func setupVisitorView(){
        
        let VisitorView = LMVisitorView(frame: view.bounds)
        view.insertSubview(VisitorView, belowSubview: navigationBar)
        
        navItem.leftBarButtonItem = UIBarButtonItem(title: "注册", style: .plain, target: self, action: #selector(registeButItem))
        
        
        navItem.rightBarButtonItem = UIBarButtonItem(title: "登陆", style: .plain, target: self, action: #selector(loginButItem))
        
        //设置访客视图信息(将basec字典信息传给访客视图)
        VisitorView.visitorDict = dicttt
    }
    
    
    
   @objc func setupTableView() {
        
        //实例化tableView控件
        tableView = UITableView(frame: view.bounds, style: .plain)
        
        tableView?.delegate = self
        tableView?.dataSource = self
        
       
        tableView?.contentInset = UIEdgeInsets(top: navigationController?.navigationBar.bounds.height ?? 64, left: 0, bottom: 0, right: 0)
        //将tableView插入到navigationBar下面
       
        //处理指示器缩进
    tableView?.scrollIndicatorInsets = tableView!.contentInset 
    
    
        //实例化UIRefreshControl
        refresh = UIRefreshControl()
        refresh?.addTarget(self, action: #selector(loadDataa), for: .valueChanged)
        tableView?.addSubview(refresh!)
        view.insertSubview(tableView!, belowSubview: navigationBar)
    }

}



//MARK : - 遵守其数据源协议与代理方法
extension LMBaseViewController: UITableViewDelegate,UITableViewDataSource{
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 0
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
        return UITableViewCell()
    }
    
    // 显示最后一行的就会t调用此方法
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath){
        //判断是否是最后一行（当indexPath.section最大，indexPath.row最大才是最后一行）
        let row = indexPath.row
        let section = tableView.numberOfSections
        
        //当列表为空时
        if row < 0 || section < 1 {
            return
        }
        
        //获取行数
        let count = tableView.numberOfRows(inSection: section-1)
        
        if row == (count - 1) && !stretchingUp {
            
            stretchingUp = true
            loadDataa()
        }
    }
    
}
